#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File  : 应用案例.py
# @Author: anarchy
# @Date  : 2025/5/13
# @Desc  : 智能简历生成gradio应用

import gradio as gr
import json
from dwspark.config import Config
from dwspark.models import ResumeGenerator
from loguru import logger

# 初始化配置和简历生成器
# 请确保您的环境变量或dwspark配置已正确设置


try:
    config = Config()
    resume_gen = ResumeGenerator(config=config)
    logger.info("智能简历生成器初始化成功 (Gradio App).")
except Exception as e:
    logger.error(f"初始化简历生成器失败: {e}")
    resume_gen = None

def generate_resume_from_text(description_text: str) -> str:
    """
    根据用户输入的文本描述生成简历链接。
    """
    if not resume_gen:
        return "错误：简历生成器未成功初始化，请检查配置和日志。"
    if not description_text or description_text.strip() == "":
        return "请输入有效的简历描述文本。"

    logger.info(f'接收到简历描述 (Gradio)') # 为了安全，不在日志中记录完整的描述

    try:
        generated_resume_bytes = resume_gen.generate(resume_description_text=description_text)
        
        if not generated_resume_bytes:
            logger.warning("简历生成API调用返回空结果 (Gradio)。")
            return "生成简历失败，API未返回有效数据。"

        logger.info(f"简历生成API调用成功，接收到数据 (Gradio)。")
        response_str = generated_resume_bytes.decode('utf-8')
        response_json = json.loads(response_str)
        
        # 从响应中提取链接
        links = response_json.get("links")
        if links and isinstance(links, list) and len(links) > 0:
            result_lines = [f"简历已生成！共找到 {len(links)} 组链接："]
            valid_links_found = False
            for i, link_info in enumerate(links):
                img_url = link_info.get("img_url")
                word_url = link_info.get("word_url")
                
                group_lines = [f"\n### 第 {i+1} 组："]
                if img_url:
                    group_lines.append(f"  图片链接: [{img_url}]({img_url})")
                    valid_links_found = True
                else:
                     group_lines.append("  图片链接: 未提供")
                if word_url:
                    group_lines.append(f"  文档链接: [{word_url}]({word_url})")
                    valid_links_found = True
                else:
                    group_lines.append("  文档链接: 未提供")
                result_lines.extend(group_lines)

            if valid_links_found:
                 logger.info(f"简历已生成 (Gradio)，共 {len(links)} 组链接。")
                 return "\n".join(result_lines) # 使用正确的换行符
            else:
                logger.warning(f"API响应中所有链接组均无效或不完整 (Gradio): {response_str}")
                return f"生成成功，但未能从响应中提取有效的链接。API响应: {response_str}"

        else:
            logger.warning(f"API响应中未找到有效的链接信息 (Gradio): {response_str}")
            return f"生成成功，但响应中未找到链接。API响应: {response_str}"

    except json.JSONDecodeError as json_err:
        logger.error(f"解析简历生成API响应失败 (Gradio): {json_err}")
        logger.error(f"原始响应内容 (bytes): {generated_resume_bytes}")
        return f"解析API响应失败: {json_err}。请检查服务状态或日志。"
    except Exception as ex:
        logger.error(f"生成简历过程中发生未知错误 (Gradio): {ex}")
        return f"生成简历时发生错误: {ex}"

# 创建 Gradio 界面
iface = gr.Interface(
    fn=generate_resume_from_text,
    inputs=gr.Textbox(lines=10, placeholder="""例如：张三，男，28岁，求职Java开发工程师...
请详细描述您的基本信息、教育背景、工作经历、项目经验、技能特长等。""", label="请输入简历描述文本："),
    outputs=gr.Markdown(label="生成结果（简历链接）", value="点击上方按钮提交描述后，生成的简历链接将显示在此处。"), # 改为 gr.Markdown 并添加初始值
    title="智能简历生成助手",
    description="输入您的简历描述，AI将为您生成简历的图片和Word文档链接。基于Datawhale Spark SDK。",
    allow_flagging="never"
)

if __name__ == "__main__":
    logger.info("正在启动Gradio应用 (智能简历生成)...")
    # share=True 会创建一个公开链接，方便分享
    # inbrowser=True 会自动在浏览器中打开
    iface.launch(inbrowser=True) 
